The two scatterplots

下記の2つの散布図を講義に含めていただけるとありがたいです。

Setup

library(tidyverse)
── Attaching core tidyverse packages ──────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.2     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.1     ── Conflicts ────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(WDI)

I. International Data on Inflation and Money Growth

Macroeonomics 7eds, Chapter 4: Money and Inflation  Figure 4-1 and Figure 4-2

Scatter plots between Inflation rate (percent) and Money supply growth (percent)

Indicator1: Broad money (current LCU)-a proxy to the money supply

FM.LBL.BMNY.CN

Broad money (IFS line 35L..ZK) is the sum of currency outside banks; demand deposits other than those of the central government;  (図を描くために、変化率を計算する必要があります。)

Indicator2: Inflation, consumer prices (annual %) 

FP.CPI.TOTL.ZG

Inflation as measured by the consumer price index reflects the annual percentage change in the cost to the average consumer of acquiring a basket of goods and services that may be fixed or changed at specified intervals, such as yearly. The Laspeyres formula is generally used. 

df1 <- WDI("all", c(bmny = "FM.LBL.BMNY.CN", cpi = "FP.CPI.TOTL.ZG"), extra = TRUE)
glimpse(df1)
Rows: 16,758
Columns: 14
$ country     <chr> "Afghanistan", "Afghanistan", "Afghanistan", …
$ iso2c       <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF…
$ iso3c       <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "AF…
$ year        <int> 2014, 2012, 2009, 2013, 1971, 2015, 1969, 201…
$ status      <chr> "", "", "", "", "", "", "", "", "", "", "", "…
$ lastupdated <chr> "2023-05-10", "2023-05-10", "2023-05-10", "20…
$ bmny        <dbl> 402465467444, 338614163696, 202231264210, 372…
$ cpi         <dbl> 4.6739960, 6.4412128, -6.8111611, 7.3857718, …
$ region      <chr> "South Asia", "South Asia", "South Asia", "So…
$ capital     <chr> "Kabul", "Kabul", "Kabul", "Kabul", "Kabul", …
$ longitude   <chr> "69.1761", "69.1761", "69.1761", "69.1761", "…
$ latitude    <chr> "34.5228", "34.5228", "34.5228", "34.5228", "…
$ income      <chr> "Low income", "Low income", "Low income", "Lo…
$ lending     <chr> "IDA", "IDA", "IDA", "IDA", "IDA", "IDA", "ID…

Figure 4.1 United States

df1 %>% filter(iso3c == "USA") %>% 
  filter(year %in% seq(1960, 2020, 5)) %>%
  ggplot(aes(x = bmny, y = cpi, label = year)) + geom_point() + geom_label(nudge_y = 1)

df1 %>% filter(iso3c == "USA") %>% 
  filter(year %in% seq(1960, 2020, 5)) %>%
  mutate(mnyp = bmny / lag(bmny))  %>% drop_na(mnyp) %>%
  ggplot(aes(x = mnyp, y = cpi, label = year)) + geom_point() + geom_label(nudge_x = 0.05) + labs(title = "Change in 5 year span")

library(plotly)
ppp1 <- df1 %>% filter(iso3c == "USA") %>% 
  filter(year %in% seq(1960, 2020, 5)) %>%
  mutate(mnyp = bmny / lag(bmny))  %>% drop_na(mnyp) %>%
  ggplot(aes(x = mnyp, y = cpi, label = year)) + geom_point()
ggplotly(ppp1)
ppp2 <- df1 %>% filter(region != "Aggregates") %>% 
  filter(country != "Angola") %>%
  filter(year %in% c(1999, 2007)) %>%
  group_by(country) %>% 
  mutate(mnyp = bmny / lag(bmny))  %>% drop_na(mnyp) %>%
  ggplot(aes(x = mnyp, y = cpi, label = country, col = income)) + geom_point() + 
  scale_x_log10()
ggplotly(ppp2)

II. Okun’s Law: The relationship between the change in the unemployment rate and the percent change in real GDP

Macroeonomics 7eds, Chapter 9: Introduction to Economic Fluctuations,   Figure 9-4

Indicator1: GDP growth (annual %)

NY.GDP.MKTP.KD.ZG

Annual percentage growth rate of GDP at market prices based on constant local currency. Aggregates are based on constant 2015 prices, expressed in U.S. dollars. GDP is the sum of gross value added by all resident producers in the economy plus any product taxes and minus any subsidies not included in the value of the products. It is calculated without making deductions for depreciation of fabricated assets or for depletion and degradation of natural resources.

Indicator2: Unemployment, total (% of total labor force) (modeled ILO estimate)

SL.UEM.TOTL.ZS

Unemployment refers to the share of the labor force that is without work but available for and seeking employment.

df2 <- WDI("all", c(growth = "NY.GDP.MKTP.KD.ZG", unemploy = "SL.UEM.TOTL.ZS"), extra = TRUE)
glimpse(df2)
Rows: 16,758
Columns: 14
$ country     <chr> "Afghanistan", "Afghanistan", "Afghanistan", …
$ iso2c       <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF…
$ iso3c       <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "AF…
$ year        <int> 2014, 2012, 2009, 2013, 1971, 2015, 1969, 201…
$ status      <chr> "", "", "", "", "", "", "", "", "", "", "", "…
$ lastupdated <chr> "2023-05-10", "2023-05-10", "2023-05-10", "20…
$ growth      <dbl> 2.7245434, 12.7522871, 21.3905284, 5.6007447,…
$ unemploy    <dbl> 7.910, 8.019, 8.082, 7.949, NA, 8.989, NA, 8.…
$ region      <chr> "South Asia", "South Asia", "South Asia", "So…
$ capital     <chr> "Kabul", "Kabul", "Kabul", "Kabul", "Kabul", …
$ longitude   <chr> "69.1761", "69.1761", "69.1761", "69.1761", "…
$ latitude    <chr> "34.5228", "34.5228", "34.5228", "34.5228", "…
$ income      <chr> "Low income", "Low income", "Low income", "Lo…
$ lending     <chr> "IDA", "IDA", "IDA", "IDA", "IDA", "IDA", "ID…
df2p <- df2 %>% filter(iso3c == "USA") %>% 
  mutate(unemployp = unemploy/lag(unemploy)) %>%
  drop_na(unemployp)
df2p

Figure 9.4 United States

df2p %>% 
  ggplot(aes(x = unemployp, y = growth, label = year)) + geom_point() + geom_label(nudge_y = 1)

ppp3 <- df2p %>% 
  ggplot(aes(x = unemployp, y = growth, label = year)) + geom_point() + geom_label(nudge_y = 1) + geom_smooth(method = "lm", formula = 'y~x', se = FALSE)
ggplotly(ppp3)
Warning: Removed 1 rows containing non-finite values (`stat_smooth()`).Warning: The following aesthetics were dropped during statistical
transformation: label
ℹ This can happen when ggplot fails to infer the correct grouping
  structure in the data.
ℹ Did you forget to specify a `group` aesthetic or to convert a
  numerical variable into a factor?Warning: geom_GeomLabel() has yet to be implemented in plotly.
  If you'd like to see this geom implemented,
  Please open an issue with your example code at
  https://github.com/ropensci/plotly/issues
df2p %>% lm(growth ~ unemployp, .) %>% summary()

Call:
lm(formula = growth ~ unemployp, data = .)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.9373 -0.8906 -0.2653  0.9466  1.8099 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   8.1191     0.7729  10.504 4.89e-11 ***
unemployp    -5.4873     0.7370  -7.445 5.22e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.091 on 27 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.6724,    Adjusted R-squared:  0.6603 
F-statistic: 55.43 on 1 and 27 DF,  p-value: 5.221e-08
LS0tCnRpdGxlOiAiRGF0YSBTY2llbmNlIGZvciBNYWNyb2Vjb25vbWljcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMgVGhlIHR3byBzY2F0dGVycGxvdHMgCgrkuIvoqJjjga7vvJLjgaTjga7mlaPluIPlm7PjgpLorJvnvqnjgavlkKvjgoHjgabjgYTjgZ/jgaDjgZHjgovjgajjgYLjgorjgYzjgZ/jgYTjgafjgZnjgIIKCiMjIyBTZXR1cCAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShXREkpCmBgYAoKCiMjIyBJLiBJbnRlcm5hdGlvbmFsIERhdGEgb24gSW5mbGF0aW9uIGFuZCBNb25leSBHcm93dGggCk1hY3JvZW9ub21pY3MgN2VkcywgQ2hhcHRlciA0OiBNb25leSBhbmQgSW5mbGF0aW9u44CACkZpZ3VyZSA0LTEgYW5kIEZpZ3VyZSA0LTIKCgpTY2F0dGVyIHBsb3RzIGJldHdlZW4gSW5mbGF0aW9uIHJhdGUgKHBlcmNlbnQpIGFuZCBNb25leSBzdXBwbHkgZ3Jvd3RoIChwZXJjZW50KQoKCkluZGljYXRvcjE6IEJyb2FkIG1vbmV5IChjdXJyZW50IExDVSktYSBwcm94eSB0byB0aGUgbW9uZXkgc3VwcGx5IAoKRk0uTEJMLkJNTlkuQ04gCgpCcm9hZCBtb25leSAoSUZTIGxpbmUgMzVMLi5aSykgaXMgdGhlIHN1bSBvZiBjdXJyZW5jeSBvdXRzaWRlIGJhbmtzOyAgZGVtYW5kIGRlcG9zaXRzIG90aGVyIHRoYW4gdGhvc2Ugb2YgdGhlIGNlbnRyYWwgZ292ZXJubWVudDvjgIAK77yI5Zuz44KS5o+P44GP44Gf44KB44Gr44CB5aSJ5YyW546H44KS6KiI566X44GZ44KL5b+F6KaB44GM44GC44KK44G+44GZ44CC77yJCgpJbmRpY2F0b3IyOiBJbmZsYXRpb24sIGNvbnN1bWVyIHByaWNlcyAoYW5udWFsICUp44CACgpGUC5DUEkuVE9UTC5aRyAKCkluZmxhdGlvbiBhcyBtZWFzdXJlZCBieSB0aGUgY29uc3VtZXIgcHJpY2UgaW5kZXggcmVmbGVjdHMgdGhlIGFubnVhbCBwZXJjZW50YWdlIGNoYW5nZSBpbiB0aGUgY29zdCB0byB0aGUgYXZlcmFnZSBjb25zdW1lciBvZiBhY3F1aXJpbmcgYSBiYXNrZXQgb2YgZ29vZHMgYW5kIHNlcnZpY2VzIHRoYXQgbWF5IGJlIGZpeGVkIG9yIGNoYW5nZWQgYXQgc3BlY2lmaWVkIGludGVydmFscywgc3VjaCBhcyB5ZWFybHkuIFRoZSBMYXNwZXlyZXMgZm9ybXVsYSBpcyBnZW5lcmFsbHkgdXNlZC7jgIAKCmBgYHtyIGNhY2hlID0gVFJVRX0KZGYxIDwtIFdESSgiYWxsIiwgYyhibW55ID0gIkZNLkxCTC5CTU5ZLkNOIiwgY3BpID0gIkZQLkNQSS5UT1RMLlpHIiksIGV4dHJhID0gVFJVRSkKYGBgCgpgYGB7cn0KZ2xpbXBzZShkZjEpCmBgYAoKIyMjIyBGaWd1cmUgNC4xIFVuaXRlZCBTdGF0ZXMKCmBgYHtyfQpkZjEgJT4lIGZpbHRlcihpc28zYyA9PSAiVVNBIikgJT4lIAogIGZpbHRlcih5ZWFyICVpbiUgc2VxKDE5NjAsIDIwMjAsIDUpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBibW55LCB5ID0gY3BpLCBsYWJlbCA9IHllYXIpKSArIGdlb21fcG9pbnQoKSArIGdlb21fbGFiZWwobnVkZ2VfeSA9IDEpCmBgYAoKYGBge3J9CmRmMSAlPiUgZmlsdGVyKGlzbzNjID09ICJVU0EiKSAlPiUgCiAgZmlsdGVyKHllYXIgJWluJSBzZXEoMTk2MCwgMjAyMCwgNSkpICU+JQogIG11dGF0ZShtbnlwID0gYm1ueSAvIGxhZyhibW55KSkgICU+JSBkcm9wX25hKG1ueXApICU+JQogIGdncGxvdChhZXMoeCA9IG1ueXAsIHkgPSBjcGksIGxhYmVsID0geWVhcikpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9sYWJlbChudWRnZV94ID0gMC4wNSkgKyBsYWJzKHRpdGxlID0gIkNoYW5nZSBpbiA1IHllYXIgc3BhbiIpCmBgYAoKYGBge3J9CmxpYnJhcnkocGxvdGx5KQpwcHAxIDwtIGRmMSAlPiUgZmlsdGVyKGlzbzNjID09ICJVU0EiKSAlPiUgCiAgZmlsdGVyKHllYXIgJWluJSBzZXEoMTk2MCwgMjAyMCwgNSkpICU+JQogIG11dGF0ZShtbnlwID0gYm1ueSAvIGxhZyhibW55KSkgICU+JSBkcm9wX25hKG1ueXApICU+JQogIGdncGxvdChhZXMoeCA9IG1ueXAsIHkgPSBjcGksIGxhYmVsID0geWVhcikpICsgZ2VvbV9wb2ludCgpCmdncGxvdGx5KHBwcDEpCmBgYAoKYGBge3J9CnBwcDIgPC0gZGYxICU+JSBmaWx0ZXIocmVnaW9uICE9ICJBZ2dyZWdhdGVzIikgJT4lIAogIGZpbHRlcihjb3VudHJ5ICE9ICJBbmdvbGEiKSAlPiUKICBmaWx0ZXIoeWVhciAlaW4lIGMoMTk5OSwgMjAwNykpICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JSAKICBtdXRhdGUobW55cCA9IGJtbnkgLyBsYWcoYm1ueSkpICAlPiUgZHJvcF9uYShtbnlwKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbnlwLCB5ID0gY3BpLCBsYWJlbCA9IGNvdW50cnksIGNvbCA9IGluY29tZSkpICsgZ2VvbV9wb2ludCgpICsgCiAgc2NhbGVfeF9sb2cxMCgpCmdncGxvdGx5KHBwcDIpCmBgYAoKCgojIyMgSUkuIE9rdW4ncyBMYXc6IFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY2hhbmdlIGluIHRoZSB1bmVtcGxveW1lbnQgcmF0ZSBhbmQgdGhlIHBlcmNlbnQgY2hhbmdlIGluIHJlYWwgR0RQIApNYWNyb2Vvbm9taWNzIDdlZHMsIENoYXB0ZXIgOTogSW50cm9kdWN0aW9uIHRvIEVjb25vbWljIEZsdWN0dWF0aW9ucywg44CACkZpZ3VyZSA5LTQKCkluZGljYXRvcjE6IEdEUCBncm93dGggKGFubnVhbCAlKSAKCk5ZLkdEUC5NS1RQLktELlpHIAoKQW5udWFsIHBlcmNlbnRhZ2UgZ3Jvd3RoIHJhdGUgb2YgR0RQIGF0IG1hcmtldCBwcmljZXMgYmFzZWQgb24gY29uc3RhbnQgbG9jYWwgY3VycmVuY3kuIEFnZ3JlZ2F0ZXMgYXJlIGJhc2VkIG9uIGNvbnN0YW50IDIwMTUgcHJpY2VzLCBleHByZXNzZWQgaW4gVS5TLiBkb2xsYXJzLiBHRFAgaXMgdGhlIHN1bSBvZiBncm9zcyB2YWx1ZSBhZGRlZCBieSBhbGwgcmVzaWRlbnQgcHJvZHVjZXJzIGluIHRoZSBlY29ub215IHBsdXMgYW55IHByb2R1Y3QgdGF4ZXMgYW5kIG1pbnVzIGFueSBzdWJzaWRpZXMgbm90IGluY2x1ZGVkIGluIHRoZSB2YWx1ZSBvZiB0aGUgcHJvZHVjdHMuIEl0IGlzIGNhbGN1bGF0ZWQgd2l0aG91dCBtYWtpbmcgZGVkdWN0aW9ucyBmb3IgZGVwcmVjaWF0aW9uIG9mIGZhYnJpY2F0ZWQgYXNzZXRzIG9yIGZvciBkZXBsZXRpb24gYW5kIGRlZ3JhZGF0aW9uIG9mIG5hdHVyYWwgcmVzb3VyY2VzLiAKCkluZGljYXRvcjI6IFVuZW1wbG95bWVudCwgdG90YWwgKCUgb2YgdG90YWwgbGFib3IgZm9yY2UpIChtb2RlbGVkIElMTyBlc3RpbWF0ZSkgCgpTTC5VRU0uVE9UTC5aUyAKClVuZW1wbG95bWVudCByZWZlcnMgdG8gdGhlIHNoYXJlIG9mIHRoZSBsYWJvciBmb3JjZSB0aGF0IGlzIHdpdGhvdXQgd29yayBidXQgYXZhaWxhYmxlIGZvciBhbmQgc2Vla2luZyBlbXBsb3ltZW50LiAKCmBgYHtyIGNhY2hlID0gVFJVRX0KZGYyIDwtIFdESSgiYWxsIiwgYyhncm93dGggPSAiTlkuR0RQLk1LVFAuS0QuWkciLCB1bmVtcGxveSA9ICJTTC5VRU0uVE9UTC5aUyIpLCBleHRyYSA9IFRSVUUpCmBgYAoKYGBge3J9CmdsaW1wc2UoZGYyKQpgYGAKCmBgYHtyfQpkZjJwIDwtIGRmMiAlPiUgZmlsdGVyKGlzbzNjID09ICJVU0EiKSAlPiUgCiAgbXV0YXRlKHVuZW1wbG95cCA9IHVuZW1wbG95L2xhZyh1bmVtcGxveSkpICU+JQogIGRyb3BfbmEodW5lbXBsb3lwKQpkZjJwCmBgYAoKIyMjIyBGaWd1cmUgOS40IFVuaXRlZCBTdGF0ZXMKCmBgYHtyfQpkZjJwICU+JSAKICBnZ3Bsb3QoYWVzKHggPSB1bmVtcGxveXAsIHkgPSBncm93dGgsIGxhYmVsID0geWVhcikpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9sYWJlbChudWRnZV95ID0gMSkKYGBgCgpgYGB7cn0KcHBwMyA8LSBkZjJwICU+JSAKICBnZ3Bsb3QoYWVzKHggPSB1bmVtcGxveXAsIHkgPSBncm93dGgsIGxhYmVsID0geWVhcikpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9sYWJlbChudWRnZV95ID0gMSkgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBmb3JtdWxhID0gJ3l+eCcsIHNlID0gRkFMU0UpCmdncGxvdGx5KHBwcDMpCmBgYAoKYGBge3J9CmRmMnAgJT4lIGxtKGdyb3d0aCB+IHVuZW1wbG95cCwgLikgJT4lIHN1bW1hcnkoKQpgYGAKCgo=